home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 July: Mac OS SDK / Dev.CD Jul 96 SDK / Dev.CD Jul 96 SDK1.toast / Development Kits (Disc 1) / OpenDoc Development Framework / ODFDev / ODF / Found / ODUtils / Unused / BArray.cpp next >
Encoding:
C/C++ Source or Header  |  1996-04-25  |  4.5 KB  |  190 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        BArray.cpp
  3.  
  4.     Contains:    ByteArray implementation
  5.  
  6.     Owned by:    Vincent Lo
  7.  
  8.     Copyright:    © 1994 - 1995 by Apple Computer, Inc., all rights reserved.
  9.  
  10.     
  11. */
  12.  
  13.  
  14. #ifndef _ODTYPES_
  15. #include <ODTypes.h>
  16. #endif
  17.  
  18. #ifndef _BARRAY_
  19. #include <BArray.h>
  20. #endif
  21.  
  22. #ifndef _EXCEPT_
  23. #include <Except.h>
  24. #endif
  25.  
  26. #ifndef _ODMEMORY_
  27. #include <ODMemory.h>
  28. #endif
  29.  
  30. #ifndef SOM_Module_OpenDoc_Errors_defined
  31. #include <ErrorDef.xh>
  32. #endif
  33.  
  34. //------------------------------------------------------------------------------
  35. // CreateByteArray
  36. //------------------------------------------------------------------------------
  37.  
  38. ODByteArray* CreateByteArray(void* buffer, ODULong size)
  39. {
  40.     ODByteArray*    ba = (ODByteArray*) ODNewPtrClear(sizeof(ODByteArray));
  41.     if (ba != kODNULL) {
  42.         ba->_buffer = (octet*) ODNewPtrClear(size);
  43.         if (ba->_buffer) {
  44.             ODBlockMove(buffer, ba->_buffer, size);
  45.             ba->_length = size;
  46.             ba->_maximum = size;
  47.         }
  48.         else
  49.             THROW(kODErrOutOfMemory);
  50.     }
  51.     else
  52.         THROW(kODErrOutOfMemory);
  53.     
  54.     return ba;
  55. }
  56.  
  57. //------------------------------------------------------------------------------
  58. // CreateByteArrayStruct
  59. //------------------------------------------------------------------------------
  60.  
  61. ODByteArray CreateByteArrayStruct(void* buffer, ODULong size)
  62. {
  63.     ODByteArray    ba = CreateEmptyByteArrayStruct(size);
  64.  
  65.     if ( size > 0 )
  66.     {
  67.         ODBlockMove(buffer, ba._buffer, size);
  68.         ba._length = size;
  69.     }
  70.     
  71.     return ba;
  72. }
  73.  
  74. //------------------------------------------------------------------------------
  75. // CreateEmptyByteArray
  76. //------------------------------------------------------------------------------
  77.  
  78. ODByteArray* CreateEmptyByteArray(ODULong maximum)
  79. {
  80.     ODByteArray*    ba = (ODByteArray*) ODNewPtrClear(sizeof(ODByteArray));
  81.     ODPtr            buffer = ODNewPtrClear(maximum);
  82.  
  83.     if ((ba != kODNULL) && (buffer != kODNULL)) {
  84.         ba->_buffer = (octet *) buffer;
  85.         ba->_length = 0;
  86.         ba->_maximum = maximum;
  87.     }
  88.     else {
  89.         ODDisposePtr(ba);
  90.         ODDisposePtr(buffer);
  91.         THROW(kODErrOutOfMemory);
  92.     }
  93.     return ba;
  94. }
  95.  
  96. //------------------------------------------------------------------------------
  97. // CreateEmptyByteArrayStruct
  98. //------------------------------------------------------------------------------
  99.  
  100. ODByteArray CreateEmptyByteArrayStruct(ODULong maximum)
  101. {
  102.     ODByteArray    ba;
  103.  
  104.     if ( maximum > 0 )
  105.     {
  106.         ba._buffer = (octet*) ODNewPtrClear(maximum);
  107.         if ( ba._buffer == kODNULL )
  108.             THROW(kODErrOutOfMemory);
  109.     }
  110.     else
  111.         ba._buffer = kODNULL;
  112.  
  113.     ba._length = 0;
  114.     ba._maximum = maximum;
  115.  
  116.     return ba;
  117. }
  118.  
  119. //------------------------------------------------------------------------------
  120. // UseByteArray
  121. //------------------------------------------------------------------------------
  122.  
  123. void UseByteArray(ODByteArray* ba, void* buffer, ODULong size)
  124. {
  125.     ba->_buffer = (octet *) buffer;
  126.     ba->_length = size;
  127.     ba->_maximum = size;
  128. }
  129.  
  130. //------------------------------------------------------------------------------
  131. // CopyByteArray
  132. //------------------------------------------------------------------------------
  133.  
  134. ODByteArray* CopyByteArray(ODByteArray* fromBA)
  135. {
  136.     ODByteArray*    ba = (ODByteArray*) ODNewPtrClear(sizeof(ODByteArray));
  137.     ODPtr            buffer = ODNewPtrClear(fromBA->_maximum);
  138.  
  139.     if ((ba != kODNULL) && (buffer != kODNULL)) {
  140.         ba->_buffer = (octet*) buffer;
  141.         ODBlockMove(fromBA->_buffer, ba->_buffer, fromBA->_length);
  142.         ba->_length = fromBA->_length;
  143.         ba->_maximum = fromBA->_maximum;
  144.     }
  145.     else {
  146.         ODDisposePtr(ba);
  147.         ODDisposePtr(buffer);
  148.         THROW(kODErrOutOfMemory);
  149.     }
  150.     return ba;    
  151. }
  152.  
  153. //------------------------------------------------------------------------------
  154. // CopyByteArrayStruct
  155. //------------------------------------------------------------------------------
  156.  
  157. ODByteArray CopyByteArrayStruct(ODByteArray* fromBA)
  158. {
  159.     ODByteArray    ba = CreateEmptyByteArrayStruct(fromBA->_maximum);
  160.  
  161.     if ( fromBA->_length > 0 )
  162.     {
  163.         ODBlockMove(fromBA->_buffer, ba._buffer, fromBA->_length);
  164.         ba._length = fromBA->_length;
  165.     }
  166.  
  167.     return ba;    
  168. }
  169.  
  170. //------------------------------------------------------------------------------
  171. // DisposeByteArray
  172. //------------------------------------------------------------------------------
  173.  
  174. void DisposeByteArray(ODByteArray* array)
  175. {
  176.     if (array->_buffer != kODNULL)
  177.         ODDisposePtr(array->_buffer);
  178.     ODDisposePtr(array);
  179. }
  180.  
  181. //------------------------------------------------------------------------------
  182. // AreByteArraysEqual
  183. //------------------------------------------------------------------------------
  184.  
  185. ODBoolean AreByteArraysEqual(ODByteArray* ba1, ODByteArray* ba2)
  186. {
  187.     return (((ba1->_length == ba2->_length) &&
  188.             !memcmp(ba1->_buffer, ba2->_buffer, ba1->_length)) ? kODTrue : kODFalse);
  189. }
  190.